"""
定义 SecretOauth 加密类
openid 敏感数据加解密模块封装
"""

# 导入来使用 dev.py
from django.conf import settings
# 导入itsdangrous中的TimedJSONWebSignatureSerializer类，该类可以加密数据生成token并带有有效期
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer


class SecretOauth(object):
    def __init__(self, secret_key=None):
        """根据 签名(secret_key) 创建序列化器对象"""
        self.serializer = Serializer(
            secret_key=secret_key or settings.SECRET_KEY,  # 导入 dev.py 文件中的密钥
            expires_in=3600 * 24 * 14  # 有效期(秒)
        )

    def dumps(self, content_dict):
        """加密方法"""
        # 1、通过序列化器对象的dumps方法，加密数据
        token = self.serializer.dumps(content_dict)
        # 2、token是bytes类型，转换成str返回
        return token.decode("utf-8")

    def loads(self, token):
        """解密方法"""
        try:
            # 1、通过序列化器对象的loads方法，解密数据
            content_dict = self.serializer.loads(token)
        except Exception as e:
            print(e)
            return None  # 解密失败返回None，有可能是过期，也有可能是伪造的数据
        # 2、返回解密完毕的原字典数据
        return content_dict
